﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Joel.Vishnu.Repositorios;
using Joel.Vishnu.Presentacion.Vistas;
using Joel.Vishnu.Modelo.Enumeradores;
using Joel.Vishnu.Modelo.Entidades;

namespace Joel.Vishnu.Presentacion
{
    public class BarriosPresentador
    {
        #region Constructores

        public BarriosPresentador(IBarrios vista)
        {
            this.vista = vista;
        }

        #endregion

        #region Atributos

        private IBarrios vista;

        #endregion

        #region Propiedades

        public RepositorioBarrio RepositorioBarrio
        {
            get { return new RepositorioBarrio(); }
        }

        #endregion

        #region Metodos

        public void Inicializar()
        {
            ActualizarBarrios();
        }

        public void ActualizarBarrios()
        {
            vista.ListaBarrios = (from item in RepositorioBarrio.DevolverTodos()
                                  orderby item.Nombre
                                  select item).ToList();
        }

        public void Aceptar()
        {
            if (vista.Estado == EnumEstado.MODIFICAR && vista.BarrioId == (Int32)EnumBarrios.BARRIO_POR_DEFECTO)
                throw new Exception("No se puede modificar un barrio por defecto.");
            if (String.IsNullOrWhiteSpace(vista.Nombre))
                throw new Exception("El nombre no puede quedar vacio.");
            switch (vista.Estado)
            {
                case EnumEstado.NUEVO:
                    {
                        Barrio barrio = new Barrio();
                        barrio.Nombre = vista.Nombre.Trim();
                        RepositorioBarrio.Insertar(barrio);
                        break;
                    }
                case EnumEstado.MODIFICAR:
                    {
                        Barrio barrio = RepositorioBarrio.DevolverPorId(vista.BarrioId);
                        if (barrio == null)
                            throw new Exception("El barrio no existe.");
                        barrio.Nombre = vista.Nombre.Trim();
                        RepositorioBarrio.Modificar(barrio);
                        break;
                    }
            }
            ActualizarBarrios();
        }

        public void Eliminar()
        {
            if (vista.BarrioId == (Int32)EnumBarrios.BARRIO_POR_DEFECTO)
                throw new Exception("No se puede eliminar un barrio por defecto.");
            Barrio barrio = null;
            barrio = RepositorioBarrio.DevolverPorId(vista.BarrioId);
            if (barrio == null)
                throw new Exception("El barrio no existe.");
            RepositorioBarrio.ModificarClientes(RepositorioBarrio.DevolverPorId(1), barrio);
            RepositorioBarrio.ModificarEmpleados(RepositorioBarrio.DevolverPorId(1), barrio);
            RepositorioBarrio.Eliminar(barrio);
            ActualizarBarrios();
        }

        #endregion
    }
}